package com.xuecheng.content.service.impl;

import com.xuecheng.content.mapper.CourseCategoryMapper;
import com.xuecheng.content.model.dto.CourseCategoryTreeDto;
import com.xuecheng.content.model.po.CourseCategory;
import com.xuecheng.content.service.CourseCategoryService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * @author: Hes
 * @description 课程分类查询实现
 * @date: 2023/6/20 10:15
 */
@Slf4j
@Service
public class CourseCategoryServiceImpl implements CourseCategoryService {
    @Autowired
    CourseCategoryMapper categoryMapper;

    /**
     * 查询课程分类
     *
     * @return
     */
    @Override
    public List<CourseCategoryTreeDto> queryTreeNodes(String id) {
        List<CourseCategoryTreeDto> courseCategoryTreeDtos = categoryMapper.queryTreeNodes(id);
        //将list转map,以备使用,排除根节点
        Map<String, CourseCategoryTreeDto> mapTemp = courseCategoryTreeDtos
                .stream()
                .filter(item -> !id.equals(item.getId()))
                .collect(Collectors.toMap(key -> key.getId(), value -> value, (key1, key2) -> key2));
        //最终返回的list
        List<CourseCategoryTreeDto> categoryTreeDtos = new ArrayList<>();
        //依次遍历每个元素,排除根节点
        courseCategoryTreeDtos.stream().filter(item -> !id.equals(item.getId())).forEach(item -> {
            if (item.getParentid().equals(id)) {
                categoryTreeDtos.add(item);
            }
            //找到当前节点的父节点
            CourseCategoryTreeDto courseCategoryTreeDto = mapTemp.get(item.getParentid());
            if (courseCategoryTreeDto != null) {
                if (courseCategoryTreeDto.getChildrenTreeNodes() == null) {
                    courseCategoryTreeDto.setChildrenTreeNodes(new ArrayList<CourseCategoryTreeDto>());
                }
                //下边开始往ChildrenTreeNodes属性中放子节点
                courseCategoryTreeDto.getChildrenTreeNodes().add(item);
            }
        });
        return categoryTreeDtos;
    }

//    public List<CourseCategoryTreeDto> queryTreeNodes(String id) {
//        List<CourseCategoryTreeDto> courseCategoryTreeDtos = categoryMapper.queryTreeNodes(id);
//        Map<CourseCategoryTreeDto, CourseCategoryTreeDto> collect = courseCategoryTreeDtos.stream().filter(item -> !id.equals(item.getId())).collect(Collectors.toMap(key -> key.getId(), value -> value, (key1, key2) -> key1));
//
//        ArrayList<CourseCategoryTreeDto> categoryTreeDtos = new ArrayList<>();
//        courseCategoryTreeDtos.stream().filter(item -> !id.equals(item.getId())).forEach(item -> {
//            if (item.getParentid().equals(id)) {
//                categoryTreeDtos.add(item);
//            }
//            CourseCategoryTreeDto courseCategoryTreeDto = collect.get(item.getParentid());
//            if (courseCategoryTreeDto!=null){
//                if (courseCategoryTreeDto.getChildrenTreeNodes() == null) {
//                    courseCategoryTreeDto.setChildrenTreeNodes(new ArrayList<CourseCategoryTreeDto>());
//                }
//                courseCategoryTreeDto.getChildrenTreeNodes().add(item);
//            }
//
//        });
//        return categoryTreeDtos;
//    }
//    public List<CourseCategoryTreeDto> queryTreeNodes(String id) {
//        List<CourseCategoryTreeDto> courseCategoryTreeDtos = categoryMapper.queryTreeNodes(id);
//        Map<CourseCategoryTreeDto, CourseCategoryTreeDto> mapTemp = courseCategoryTreeDtos.stream().filter(item -> !id.equals(item.getId())).collect(Collectors.toMap(key -> key.getId(), value -> value, (key1, key2) -> key1));
//        ArrayList<CourseCategoryTreeDto> courseCategories = new ArrayList<>();
//
//        courseCategoryTreeDtos.stream().filter(item -> !id.equals(item.getId())).forEach(item -> {
//            if (id.equals(item.getParentid())) {
//                courseCategories.add(item);
//            }
//            CourseCategoryTreeDto courseCategoryTreeDto = mapTemp.get(item.getParentid());
//            if (courseCategoryTreeDto.getChildrenTreeNodes() == null) {
//                courseCategoryTreeDto.setChildrenTreeNodes(new ArrayList<CourseCategoryTreeDto>());
//
//            }
//            courseCategoryTreeDto.getChildrenTreeNodes().add(item);
//        });
//        return courseCategories;
//    }
//    public List<CourseCategoryTreeDto> queryTreeNodes(String id) {
//        List<CourseCategoryTreeDto> courseCategoryTreeDtos = categoryMapper.queryTreeNodes(id);
//        //元素传map，方便排除根节点，toMap（map中的key值之类是id，value就是每一个CourseCategoryTreeDto对象，当两个key相同时，已key1为主）
//        Map<String, CourseCategoryTreeDto> mapTemp = courseCategoryTreeDtos.stream().filter(item -> !id.equals(item.getId()))
//                .collect(Collectors.toMap(key -> key.getId(), value -> value, (key1, key2) -> key1));
//        //最终返回list
//        ArrayList<CourseCategoryTreeDto> categoryTreeDtos = new ArrayList<>();
//        courseCategoryTreeDtos.stream().filter(item -> !id.equals(item.getId())).forEach(item -> {
//            if (item.getParentid().equals(id)){
//                categoryTreeDtos.add(item);
//            }
//            if(courseCategoryTreeDto!=null){
//        if(courseCategoryTreeDto.getChildrenTreeNodes() ==null){
//            courseCategoryTreeDto.setChildrenTreeNodes(new ArrayList<CourseCategoryTreeDto>());
//        }
//        //下边开始往ChildrenTreeNodes属性中放子节点
//        courseCategoryTreeDto.getChildrenTreeNodes().add(item);
//    }
//        });
//        return categoryTreeDtos;
//    }
//    public List<CourseCategoryTreeDto> queryTreeNodes(String id) {
//        List<CourseCategoryTreeDto> courseCategoryTreeDtos = categoryMapper.queryTreeNodes(id);
//        //排除根节点,便于获取节点元素
//        Map<String, CourseCategoryTreeDto> mapTemp = courseCategoryTreeDtos.stream().filter(item -> !id.equals(item.getId())).
//                collect(Collectors.toMap(key -> key.getId(), value -> value, (key1, key2) -> key2));
//        //最终返回的list
//        ArrayList<CourseCategoryTreeDto> categoryTreeDtos = new ArrayList<>();
//        //遍历元素，排除根节点
//        courseCategoryTreeDtos.stream().filter(item -> !id.equals(item.getId())).forEach(item -> {
//            //如果当前节点的父节点时根节点，放入list
//            if (id.equals(item.getParentid())) {
//                categoryTreeDtos.add(item);
//            }
//            //获取当前元素的父节点，便于把子节点放入父节点
//            //CourseCategoryTreeDto是单例的，给该对象加入属性，categoryTreeDtos这个list中的元素也会增加，list中的对象和Map中是一个对象
//            //所以从map中拿到的元素，改变它的属性，list中也会相应的改变
//            CourseCategoryTreeDto courseCategoryTreeDto = mapTemp.get(item.getParentid());
//            if (courseCategoryTreeDto != null) {
//                if (courseCategoryTreeDto.getChildrenTreeNodes() == null) {
//                    courseCategoryTreeDto.setChildrenTreeNodes(new ArrayList<CourseCategoryTreeDto>());
//                }
//                courseCategoryTreeDto.getChildrenTreeNodes().add(item);
//                System.out.println(categoryTreeDtos);
//            }
//        });
//
//
//        return categoryTreeDtos;
//    }
}
